//
//  BVHttpManagerHelper.h
//  VerticalP
//
//  Created by 农民 on 2017/7/27.
//  Copyright © 2017年 农民. All rights reserved.
//  //**********************************双神镇楼稳若泰山**************************************
/*
 *
 *          ┌─┐       ┌─┐
 *       ┌──┘ ┴───────┘ ┴──┐
 *       │                 │
 *       │       ───       │
 *       │  ─┬┘       └┬─  │
 *       │                 │
 *       │       ─┴─       │
 *       │                 │
 *       └───┐         ┌───┘
 *           │         │
 *           │         │
 *           │         │
 *           │         └──────────────┐
 *           │                        │
 *           │                        ├─┐
 *           │                        ┌─┘
 *           │                        │
 *           └─┐  ┐  ┌───────┬──┐  ┌──┘
 *             │ ─┤ ─┤       │ ─┤ ─┤
 *             └──┴──┘       └──┴──┘
 *                 神兽保佑
 *                 代码无BUG!
 */

//                            _ooOoo_
//                           o8888888o
//                           88" . "88
//                           (| -_- |)
//                           O\  =  /O
//                        ____/`---'\____
//                      .'  \\|     |//  `.
//                     /  \\|||  :  |||//  \
//                    /  _||||| -:- |||||-  \
//                    |   | \\\  -  /// |   |
//                    | \_|  ''\---/''  |   |
//                    \  .-\__  `-`  ___/-. /
//                   ___`. .'  /--.--\  `. . __
//                ."" '<  `.___\_<|>_/___.'  >'"".
//              | | :  `- \`.;`\ _ /`;.`/ - ` : | |
//              \  \ `-.   \_ __\ /__ _/   .-` /  /
//         ======`-.____`-.___\_____/___.-`____.-'======
//                            `=---='
//         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
//                  佛祖镇楼                  BUG辟易
//          佛曰:
//                  写字楼里写字间，写字间里程序员；
//                  程序人员写程序，又拿程序换酒钱。
//                  酒醒只在网上坐，酒醉还来网下眠；
//                  酒醉酒醒日复日，网上网下年复年。
//                  但愿老死电脑间，不愿鞠躬老板前；
//                  奔驰宝马贵者趣，公交自行程序员。
//                  别人笑我忒疯癫，我笑自己命太贱；
//                  不见满街漂亮妹，哪个归得程序员？

//  //**********************************双神镇楼稳若泰山**************************************

#import <Foundation/Foundation.h>

/* 定义请求类型的枚举 */
typedef NS_ENUM(NSInteger,NetWorkMethod){
    Get = 0,
    Post,
    Put,
    Delete
    
};

@interface BVHttpManager : NSObject

+ (instancetype)sharedNetManager;

/** 请求成功的Block */
typedef void(^HttpRequestSuccess)(id responseObject);

/** 请求失败的Block */
typedef void(^HttpRequestFailed)(NSError *error);

/** 缓存的Block */
typedef void(^HttpRequestCache)(id responseCache);

/** 上传或者下载的进度, Progress.completedUnitCount:当前大小 - Progress.totalUnitCount:总大小*/
typedef void (^HttpProgress)(NSProgress *progress);

/**
 *  发起网络请求,无缓存
 *
 *  @param URL        请求地址
 *  @param method     请求类型
 *  @param parameters 请求参数
 *  @param success    请求成功的回调
 *  @param failure    请求失败的回调
 *
 */

- (void)requstUrl:(NSString *)URL
     method:(NetWorkMethod)method
 parameters:(NSDictionary *)parameters
    success:(HttpRequestSuccess)success
    failure:(HttpRequestFailed)failure;

/**
 *  GET请求,无缓存
 *
 *  @param URL        请求地址
 *  @param parameters 请求参数
 *  @param success    请求成功的回调
 *  @param failure    请求失败的回调
 *
 */

- (void)GET:(NSString *)URL
    parameters:(NSDictionary *)parameters
        success:(HttpRequestSuccess)success
        failure:(HttpRequestFailed)failure;

/**
 *  POST请求,无缓存
 *
 *  @param URL        请求地址
 *  @param parameters 请求参数
 *  @param success    请求成功的回调
 *  @param failure    请求失败的回调
 *
 */
- (void)POST:(NSString *)URL
  parameters:(NSDictionary *)parameters
     success:(HttpRequestSuccess)success
     failure:(HttpRequestFailed)failure;

/**
 *  PUT请求,无缓存
 *
 *  @param URL        请求地址
 *  @param parameters 请求参数
 *  @param success    请求成功的回调
 *  @param failure    请求失败的回调
 *
 */
- (void)PUT:(NSString *)URL
        parameters:(NSDictionary *)parameters
    success:(HttpRequestSuccess)success
        failure:(HttpRequestFailed)failure
            progress:(HttpProgress)progress;

/**
*  PUT请求,无缓存
*
*  @param URL        请求地址
*  @param parameters 请求参数
*  @param success    请求成功的回调
*  @param failure    请求失败的回调
*
*/
- (void)PUT:(NSString *)URL
        parameters:(NSDictionary *)parameters
            success:(HttpRequestSuccess)success
                failure:(HttpRequestFailed)failure;

/**
 *  DELETE请求,无缓存
 *
 *  @param URL        请求地址
 *  @param parameters 请求参数
 *  @param success    请求成功的回调
 *  @param failure    请求失败的回调
 *
 */
- (void)DELETE:(NSString *)URL
        parameters:(NSDictionary *)parameters
            success:(HttpRequestSuccess)success
                failure:(HttpRequestFailed)failure;

/**
 *  上传图片文件
 *
 *  @param URL        请求地址
 *  @param parameters 请求参数
 *  @param images     图片数组
 *  @param name       文件对应服务器上的字段
 *  @param progress   上传进度信息
 *  @param success    请求成功的回调
 *  @param failure    请求失败的回调
 *
 */
- (void)uploadWithImage:(NSString *)URL
             parameters:(NSDictionary *)parameters
                 images:(NSArray<UIImage *> *)images
                   name:(NSString *)name
               progress:(HttpProgress)progress
                success:(HttpRequestSuccess)success
                failure:(HttpRequestFailed)failure;


@end
